// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. #nullable enable using System; using System.Collections; using System.Collections.Generic; namespace Microsoft.CodeAnalysis.Collections { internal static partial class SpecializedCollections { private static partial class Singleton { internal sealed class List<T> : IReadOnlyList<T>, IList<T>, IReadOnlyCollection<T> { private readonly T _loneValue; public List(T value) { _loneValue = value; } public void Add(T item) { throw new NotSupportedException(); } public void Clear() { throw new NotSupportedException(); } public bool Contains(T item) { return EqualityComparer<T>.Default.Equals(_loneValue, item); } public void CopyTo(T[] array, int arrayIndex) { array[arrayIndex] = _loneValue; } public int Count => 1; public bool IsReadOnly => true; public bool Remove(T item) { throw new NotSupportedException(); } public IEnumerator<T> GetEnumerator() { return new Enumerator<T>(_loneValue); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public T this[int index] { get { if (index != 0) { throw new IndexOutOfRangeException(); } return _loneValue; } set { throw new NotSupportedException(); } } public int IndexOf(T item) { if (Equals(_loneValue, item)) { return 0; } return -1; } public void Insert(int index, T item) { throw new NotSupportedException(); } public void RemoveAt(int index) { throw new NotSupportedException(); } } } } } |